package pfc;

import pfc.Constantes;
import pfc.Aplicacion;
import pfc.ventanas.*;
import pfc.Usuario;

import java.util.LinkedList;


/**
 * Encargada de gestionar la interfaz gráfica.
 * @author Gabriel Reus Rodríguez
 * @version 1.0, 06/11/2010
 */


public class Interfaz 
{

	/**
	*Instancia de la ventana principal
	*/
	private VentanaPrincipal principal= null;
	/**
	*Lista de ventanas de conversación.
	*/
	private LinkedList<VentanaConversacion> ventanasConversacion= null;

	/**
	 * Constructor, genera la ventana principal
	 */

	public Interfaz()
	{
		principal= new VentanaPrincipal();
		ventanasConversacion= new LinkedList<VentanaConversacion>();
	}

	public Interfaz(Aplicacion a)
	{
		principal= new VentanaPrincipal(a);
		ventanasConversacion= new LinkedList<VentanaConversacion>();
	}

	/**
	 * Función que crea una ventana de conversación y la agrega a la lista.
	 */
	public void addVentana(Conversacion conv, Aplicacion a)
	{
		VentanaConversacion v = new VentanaConversacion(a,conv);
		this.ventanasConversacion.add(v);
	}

	/**
	*Obtiene de la lista la ventana de conversacion que tiene la id que le pasamos por parametro.
	*
	*/
	public VentanaConversacion getVentanaConversacion(Conversacion conv) throws Exception
	{
		/*
		VentanaConversacion v = new VentanaConversacion();
		return v;
		*/
		for(int i=0;i<ventanasConversacion.size();i++)
		{
			VentanaConversacion v = ventanasConversacion.get(i);
			if(v.getIdConversacion() == conv.getId())
			{
				return v;
			}
		}
		throw new Exception("No se encontró la ventana asociada a la conversación.");
		
	}

	/**
	*Escribe un mensaje en el textArea de la ventana principal
	*/

	public void escribeMensajePrincipal(String txt)
	{
		this.principal.escribeGeneral(txt);
	}

	/**
	*Actualiza la lista de usuarios conectados que aparece en la ventana principal.
	*/

	public void actualizaUsuarios(LinkedList usuarios)
	{
		principal.actualizaUsuarios(usuarios);
	}
	
	/**
	* Actualiza la lista de usuarios que participan en una conversación, se utiliza cuando un usuario desconecta y se deben actualizar 
	*/
	public void actualizaConversaciones()
	{
		for (int i=0;i< ventanasConversacion.size();i++)
		{
			VentanaConversacion v = ventanasConversacion.get(i);
			v.actualizaUsuarios();
		}
	
	}

	/**
	* Notifica al usuario que ha ocurrido una excepción, por defecto se enviará un mensaje al textArea general de la ventana principal.
	*/
	public void notificaExcepcion(Exception e)
	{
		this.principal.notificaExcepcion(e);
	}
}
